<?php

namespace App\Models;

use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Support\Facades\Auth;
use Illuminate\Database\Eloquent\Model;

class AdminUser extends Authenticatable
{
    use Notifiable;
    use SoftDeletes;
    protected $table = 'admin_users';
    protected $primaryKey = 'id';
    protected $fillable = ['name','email','password'];
    protected $dates = ['delete_at'];

    //该用户有哪些角色，返回所有的角色集合
    public function roles() {
        return $this->belongsToMany(AdminRole::class,'admin_user_role','user_id','role_id')->withPivot(['user_id','role_id']);
    }

    //该用户是否有某个角色
    /**
     * @param $destRoles 你要判断的角色集合
     * @return bool
     */
    public function isInRoles($roles) {

        //dd(gettype($destRoles));
        /*
         * $destRoles 和 $this->roles() 做交集，如果有交集，说明目标角色在整个角色集合里
         * intersect()返回两个集合的交集
         * */
        if($roles->intersect($this->roles())->count() > 0){
            return true;
        }else{
            return false;
        }

        //return !!$roles->intersect($this->roles)->count();
    }

    //给用户分配角色
    /**
     * 得到了所有的 $this->roles() 集合后，然后保存roleId，laravel会把关系自动保存到admin_user_role表中
     * @param $roleId 要分配的角色id
     * @return Model
     */
    public function assignRole($roleId) {
        return $this->roles()->save($roleId);
    }

    //取消分配的角色
    /**
     * 会删除admin_user_role关联表的关系，并不会删除admin_user和admin_role表中的数据
     * @param $roleId
     * @return int
     */
    public function deleteRole($roleId) {
        return $this->roles()->detach($roleId);
    }
    
    //用户是否有权限
    public function hasPermission($permission) {
        return $this->isInRoles($permission->roles);
    }
    
}
